/*

@author: zjc
@file: atm存取钱.go
@time: 2022/12/2 15:04
*/
package main

import (
	"fmt"
)


type ATM struct {
	bank string
	balance int
}
type User struct {
	name string
	passwd string
	balance int
}

var users = make(map[string]User)
func main()  {
	atm:=ATM{
		bank: "农行",
		balance: 500000,
	}
	flag:=0
	for {
		if flag==1{
			break
		}
		fmt.Println("1、登录")
		fmt.Println("2、注册")
		var op string
		fmt.Print("请输入你的选择:")
		fmt.Scan(&op)
		switch op {
		case "q":
			flag=1
		case "1":
			var name string
			var passwd string
			fmt.Print("请输入用户名:")
			fmt.Scan(&name)
			fmt.Print("请输入密码:")
			fmt.Scan(&passwd)
			_, ok := users[name]
			if ok && users[name].passwd==passwd{
				fmt.Println("登陆成功")
				flag2:=0
				for {
					if flag2==1{
						break
					}
					fmt.Println("1、存钱")
					fmt.Println("2、取钱")
					fmt.Println("3、查看余额")
					fmt.Println("4、退出")
					var op2 string
					fmt.Print("请输入你的操作:")
					fmt.Scan(&op2)
					switch op2 {
					case "1":
						var money int
						fmt.Print("请输入存款金额:")
						fmt.Scan(&money)
						atm.save_money(users[name],money,name)
					case "2":
						var money int
						fmt.Print("请输入取款金额:")
						fmt.Scan(&money)
						atm.get_money(users[name],money,name)
					case "3":
						atm.view_money(users[name])
					case "4":
						flag2 = 1
					}
				}
			}else {
				fmt.Println("用户名或密码错误,请重新输入!")
			}
		case "2":
			var name string
			var passwd string
			var money int
			fmt.Print("请输入用户名:")
			fmt.Scan(&name)
			fmt.Print("请输入密码:")
			fmt.Scan(&passwd)
			fmt.Print("充值初始金额:")
			fmt.Scan(&money)
			_, ok := users[name]
			if ok {
				fmt.Println("用户已存在，请重新输入")
			}else {
				users[name]=User{name,passwd,money}
			}
		}
	}
}

func (atm *ATM) save_money(user User,money int,name string)  {
	user.balance+=money
	atm.balance+=money
	users[name]=user
	fmt.Printf("存款成功! 余额为: %d\n",user.balance)
}

func (atm *ATM) get_money(user User,money int,name string) {
	if atm.balance<money{
		fmt.Println("ATM余额不足!")
	}else if user.balance<money{
		fmt.Println("余额不足!")
	}else {
		user.balance-=money
		atm.balance-=money
		users[name]=user
		fmt.Printf("取款成功! 余额为: %d\n",user.balance)
	}
}
func (atm *ATM) view_money(user User) {
	fmt.Printf("%s 余额为: %d\n",user.name,user.balance)
}

